package com.dylan.foundation;
/***
 *  yield也是一个静态方法，一旦执行，它会让当前线程让出CPU，使线程进入就绪状态，但是，需要注意的是，让出的CPU并不是代表当前线程不再运行了，
 *  如果在下一次竞争中，又获得了CPU时间片当前线程依然会继续运行。另外，让出的时间片只会分配给当前线程相同优先级的线程。
 *
 *  在未设置线程优先级时，第一个线程执行到20时会让给第二个线程运行，可是在设置了线程优先级后，高级线程在执行yield后发现没有比他优先级更高的线程，就又会开始执行，并不会中断。
 * */
public class YieldThread extends Thread {
    public YieldThread(String name) {
        super(name);
    }

    @Override
    public void run() {
        for (int i = 0; i < 50; i++) {
            //获取当前线程名称
            System.out.println(this.getName() + " " + i);
            if (i == 20) {
                Thread.yield();
            }
        }
    }

    public static void main(String[] args) {
        YieldThread yieldThread = new YieldThread("高级");
//        yieldThread.setPriority(Thread.MAX_PRIORITY);
        yieldThread.start();
        YieldThread yieldThread2 = new YieldThread("低级");
//        yieldThread2.setPriority(Thread.MIN_PRIORITY);
        yieldThread2.start();

    }
}
